<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //   静态成员属于类的成员;不是对象的成员；调用不需要实例化
      //   function Person(name, age) {
      //     this.name = name;
      //     this.age = age;
      //   }
      //   Person.num = 10;
      //   Person.fn = function () {
      //     console.log("fn");
      //   };
      //   let zhangsan = new Person("张三", 20);
      //   console.log(Person.num);
      //   Person.fn();
      // ES6 静态成员  static 修饰符来修饰
      class Person {
        static num = 10;
        constructor(name, age) {
          this.name = name;
          this.age = age;
        }
        static fn() {
          console.log("fn");
        }
      }
      // // 静态成员不需要实例化
      console.log(Person.num);
      Person.fn();
      // Person ----》生产人对象； 所有在 this上的成员都是 对象的属性和方法
      // 静态成员 都是Person的属性和方法；
      // 如何使用 ；想统计 一个类被实例化的次数；
      // let num = 0;
      // class Person{
      //     static num = 0;
      //     constructor(name){
      //         // this.num = 0;
      //         // num++;
      //         Person.num++;
      //         this.name = name;
      //     }
      // }

      // let zhangsan = new Person("张三");
      // let lisi = new Person("李四");
      // // console.log(num);
      // console.log(Person.num);

      // 现在需要每一个类只能被实例化一次，如果在实例化就返还之前的实例（对象）；
      // 全局变量保存实例化的状态；
      // let instance = null;
      // 单例模式；  window  document
      class Person {
        static instance = null;
        constructor(name) {
          if (!Person.instance) {
            Person.instance = this;
          } else {
            return Person.instance;
          }
          this.name = name;
        }
      }
      let zhangsan = new Person("张三");
      let lisi = new Person("李四");
      console.log(zhangsan, lisi);
    </script>
  </body>
</html>
